//
//  DKHomeViewController.swift
//  Sina
//
//  Created by 赵柏清 on 16/7/29.
//  Copyright © 2016年 DarkZhao. All rights reserved.
//

import UIKit
import SVProgressHUD



class DKHomeViewController: DKBaseViewController {
/// Home的viewModel
    lazy var data : DKHomeViewModel = DKHomeViewModel()
    
    private var isLoging : Bool = false

    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 如果是已经登录则,网络请求加载数据
        if DKLoginViewModel.sharedInstance.isLogin {
            
            loadDatas()
            
            // 注册
            tableView.registerClass(DKHomeTableViewCell.self, forCellReuseIdentifier: "DKHomeTableViewCell")
            
            // 设置预估行高
            tableView.estimatedRowHeight = 200
            // 设置自动计算行高
            tableView.rowHeight = UITableViewAutomaticDimension
            tableView.separatorInset = UIEdgeInsetsZero
            tableView.layoutMargins = UIEdgeInsetsZero
            
            tableView.tableFooterView = pullupView
            
            tableView.addSubview(uploadView)
            uploadView.addTarget(self, action: "loadDatas", forControlEvents: UIControlEvents.ValueChanged)
            
            // 未登录,则进入访客视图
        } else {
            visitorView.setVistorViewInfo("关注一些人，回这里看看有什么惊喜", backgroundImage: "visitordiscover_feed_image_house", isShowTurn: true)
            
            visitorView.closure = {
                let login = DKLoginViewController()
                let NAV = UINavigationController(rootViewController: login)
        
                self.presentViewController(NAV, animated: true, completion: nil)
            }

        }
    }
    
    @objc private func loadDatas() {
        
        SVProgressHUD.show()
        
        var since_id = 0
        var max_id = 0
        
        // 下拉刷新的时候
        since_id = data.modelList.first?.statusModel?.id ?? 0
        
        if pullupView.isAnimating() {
            // 如果 最后一个数据没有id,或者没有 last?.statusModel?.id, 我们就填写一个默认值
            max_id = data.modelList.last?.statusModel?.id ?? 0
            // 不要让 max_id = 0的时候也减去一
            // 由于返回的微博数据,是等于或者小于id,所以让id - 1
            if max_id > 0 {
                
                max_id = max_id - 1
                
            }
            
            // 为了确保安全
            since_id = 0
        }
        
        data.getDates(since_id, max_id: max_id, success: { () -> () in
            // 在此处理数据成功
            SVProgressHUD.dismiss()
            // 加载数据
            self.tableView.reloadData()
            
            printLog("\(self.data.modelList.count)注意")
            
            self.isLoging = false
            
            self.pullupView.stopAnimating()
            
            self.uploadView.endRefresh()
            
            }) { () -> () in
                // 在此处理数据失败
                SVProgressHUD.showErrorWithStatus("加载数据失败")
                self.isLoging = false
        }
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
    
    /// 下拉刷新
    private lazy var uploadView : DKRefreshControl = DKRefreshControl()
    /// 上拉加载视图
    private lazy var pullupView : UIActivityIndicatorView = {
        let indicatorView = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.Gray)
        return indicatorView
    }()
    
    private func showCountView(){
        
        let label = UILabel(frame: CGRectMake(0,64 - 44,kUIScreenWidth,44))
        
        label.text = "更新提示"
        
        label.backgroundColor = UIColor.orangeColor()
        
        label.textAlignment = .Center
        
        // 添加到view
        view.addSubview(label)
        
        // 把这个视图插入到 nav
        self.navigationController?.view.insertSubview(label, belowSubview: self.navigationController!.navigationBar)
        
        // 加动画
        UIView.animateWithDuration(2, animations: { () -> Void in
            // y值是让他的y值发生改变
            label.transform = CGAffineTransformMakeTranslation(0, 44)
            }) { (_) -> Void in
                
                // 动画完成之后,再让他回去
                UIView.animateWithDuration(2, animations: { () -> Void in
                    label.transform = CGAffineTransformIdentity
                    }, completion: { (_) -> Void in
                        
                        // 当完成之后, label 隐藏/移除
                        label.removeFromSuperview()
                })
        
        }
        
        printLog("加载成功")
        
    }
}

// MARK: 数据源代理方法
extension DKHomeViewController {
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return data.modelList.count
    }
    
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        
        let cell = tableView.dequeueReusableCellWithIdentifier("DKHomeTableViewCell", forIndexPath: indexPath) as! DKHomeTableViewCell
        
        cell.cellModel = data.modelList[indexPath.row]
        
        cell.layoutMargins = UIEdgeInsetsZero
        
        // 如果是最后一行,则进行上拉加载更多
        // 同时如果正在加载,则不进行反复的加载
        if indexPath.row == data.modelList.count - 1 && !isLoging{
            // 开启动画
            pullupView.startAnimating()
            loadDatas()
            
            showCountView()
            
            isLoging = true
        }
        return cell
    }
    
    override func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) {
        
    }
    
}
